package com.study.d015propertybind.fx;

import javafx.beans.InvalidationListener;
import javafx.beans.Observable;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.beans.value.WeakChangeListener;

/**
*@description InvalidationListener延迟计算监听的使用
*@author xtayhame
*date 2020年3月5日
*version
*since v1.0
*/
public class InvalidationListenerMain {
	public static void main(String[] args) {
		SimpleIntegerProperty sip=new SimpleIntegerProperty(2);

		MyChangeListener myl = new MyChangeListener();

		//可避免内存泄露的监听写法
		WeakChangeListener wkl= new WeakChangeListener(myl);

		sip.addListener(wkl);

		//立即更新
		/*sip.addListener(new ChangeListener<Number>() {
			@Override
			public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
				System.out.println("被更改了");
			}
		});*/

		//延迟更新   ， 设置多次，只有第一次执行
		/*sip.addListener(new InvalidationListener() {
			@Override
			public void invalidated(Observable observable) {
				SimpleIntegerProperty sp=(SimpleIntegerProperty)observable;
				System.out.println("延迟："+sp.get());
				System.out.println("延迟了");
			}
		});*/

		sip.set(3);
		sip.get();

		sip.set(4);
		sip.get();

		sip.set(5);
		sip.get();

		sip.set(6);

		//对应延迟更新监听，需要get()方法才会更新
		System.out.println(sip.get());

	}
}

class MyChangeListener implements ChangeListener<Number>{

	@Override
	public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
		System.out.println("测试");
	}

}
